package accesoBD;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Clase que representa la interacción de cualquier usuario conla base de datos.
 * Las clases QueryTecnico y QuerySupervisor heredan de esta.
 * @version 1.2
 * @author Juan Manuel Rodríguez González
 */
public class QueryUsuario extends GenericQuery {

    protected String idUsuario;

    /**
     * Constructor de QueryUsuario.
     * @param idUsuario String que contiene el id del usuario.
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public QueryUsuario(String idUsuario) throws SQLException, ClassNotFoundException {
        this.idUsuario = idUsuario;
    }

    /**
     * Devuelve los partes que ha creado un usuario.
     * @return Un objeto resultSet que contiene los partes creados por el usuario.
     * @throws SQLException
     */
    public ResultSet getPartesDeUsuario() throws SQLException {
        return QueryUsuario.db.selectEscrito("select * from parte_incidencia where id_usuario=" + idUsuario);
    }

    /**
     *
     * @return Un objeto resultSet que contiene
     * @throws SQLException
     */
    public ResultSet getAllAparatos() throws SQLException {
        return QueryUsuario.db.selectEscrito("select * from APARATO");
    }

    /**
     * Devuelve los partes que ha creado un usuario.
     * @return Un objeto resultSet que contiene los partes creados por el usuario.
     * @throws SQLException
     */
    public ResultSet getPartesDeUsuarioNoDesc() throws SQLException {
        return QueryUsuario.db.selectEscrito("select id_parte,estado,id_aparato from parte_incidencia where id_usuario=" + idUsuario);
    }

    /**
     * Método getter para el identificador del usuario.
     * @return Un String idUsuario.
     */
    public String getIdUsuario() {
        return idUsuario;
    }

    /**
     * Crea un parte de incidencia en la base de datos.
     * @param idAparato String que contiene el identificador del aparato.
     * @param descripcionParte String con una breve descripción para el parte de incidencia.
     * @return 
     * @throws SQLException
     */
    public boolean crearParte(String idAparato, String descripcionParte) throws SQLException {
        
        PreparedStatement ps = QueryUsuario.db.getCon().prepareStatement("insert into parte_incidencia values (parte_incidencia_seq.nextval,?,?,?,?, null)");
        ps.clearParameters();
        ps.setString(1, idUsuario);
        ps.setString(2, descripcionParte);
        ps.setString(3, "asignado");
        ps.setString(4, idAparato);
        int s = ps.executeUpdate();

        return (s > 0);
    }

    /**
     * Devuelve las salas ordenadas.
     * @return Un objeto resultSet que contiene las salas existentes.
     * @throws SQLException
     */
    public ResultSet getUbicaciones() throws SQLException {
        return QueryUsuario.db.selectEscrito("select sala from ubicacion sala order by sala");
    }

    /**
     * Devuelve los aparatos que contiene una cierta sala.
     * @param Sala nombre de la sala.
     * @return Un objeto resultSet que contiene los aparatos de la sala.
     * @throws SQLException
     */
    public ResultSet getAparatos(String Sala) throws SQLException {
        return QueryUsuario.db.selectEscrito("select * from APARATO where ID_UBICACION = (select ID_UBICACION from ubicacion where SALA='" + Sala + "')");
    }

    /**
     * Devuelve el código público de un aparato.
     * @param idAparato identificador único del aparato.
     * @return Un objeto resultSet que contiene el código público del aparato.
     * @throws SQLException
     */
    public ResultSet getCodigoPublico(String idAparato) throws SQLException {
        return QueryUsuario.db.selectEscrito("select codigo_publico from APARATO where id_aparato='" + idAparato + "'");
    }

    /**
     * Devuelve el código interno de un aparato.
     * @param codigoPublico código público del aparato.
     * @return Un objeto resultSet que contiene el código interno del aparato.
     * @throws SQLException
     */
    public ResultSet getCodigoInterno(String codigoPublico) throws SQLException {
        return QueryUsuario.db.selectEscrito("select id_aparato from APARATO where codigo_publico='" + codigoPublico + "'");
    }
}
